package com.yootk.common.util.factory;

import java.util.ResourceBundle;

/**
 * 数据层工厂类
 */
public class DAOFactory {
    private static final ResourceBundle DAO_RESOURCE = ResourceBundle.getBundle("com.yootk.resource.dao"); // DAO资源绑定

    /**
     * 根据指定的资源key获取对应DAO接口实例
     * @param key dao.properties资源文件中注册的key名称
     * @param clazz 是一种结构名称的标注
     * @param <T> 泛型类型，因为此方法可以返回所有的DAO接口实例
     * @return DAO对象实例，如果没有发现指定的key，返回null
     */
    public static <T> T getDAOInstance(String key, Class<?>...clazz) {
        String className = null; // 所有的注册资源都在资源文件之中，所以要读取内容并保存
        try {
            className = DAO_RESOURCE.getString(key); // KEY不存在查询出现异常
        } catch (Exception e) {}
        if (className == null || "".equals(className)) {    // 没有数据
            return null;
        }
        try { // 利用反射加载对象实例
            return (T) Class.forName(className).getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            return null;
        }
    }
}
